const fs = require('fs')
const path = require('path')
const { promisify } = require('util') // node里面的工具包

// 第一种写法
// function mkDir (dirPath, cb) {
//     let parts = dirPath.split(path.sep)
//     let index = 1

//     function next () {
//         if (index > parts.length) return cb && cb()
//         let current = parts.slice(0, index++).join(path.sep)
//         fs.access(current, (err) => {
//             if (err) {
//                 // 没有操作权限，需要创建
//                 fs.mkdirSync(current, next)
//             } else {
//                 next()
//             }
//         })
//     }
//     next()
// }

// mkDir('a/b/c', () => {
//     console.log('创建成功');
// })

// 第二种写法
// 将 access 与 mkdir 处理成 async 风格
const access = promisify(fs.access)
const mkdir = promisify(fs.mkdir)
async function mkDir (dirPath, cb) {
    let parts = dirPath.split(path.sep)
    for (let index = 1; index <= parts.length; index++) {
        let current = parts.slice(0, index++).join(path.sep)
        try {
            await access(current)
        } catch {
            await mkdir(current)
        }
    }
    cb && cb()
}

mkDir('a/b/c', () => {
    console.log('创建成功');
})